package com.zh.demo;

import technology.tabula.Table;

/**
 * 表特征对象
 */
public class TableFeature  {

    // 表的页码
    private int pageNum;
    // 表的行数
    private int rowNum;
    // 表的列数
    private int columnNum;
    // 表的宽度
    private double x;

    // 表的宽度
    private double width;

    // 表
    private Table table;


    private TableFeature(Table table, int pageNum) {
        this.pageNum = pageNum;
        this.table = table;
    }

    /**
     * 创建表特征对象
     * @param table
     * @param pageNum
     * @return
     */
    public static TableFeature create(Table table, int pageNum) {
        TableFeature tableFeature = new TableFeature(table, pageNum);
        tableFeature.rowNum = table.getRowCount();
        tableFeature.columnNum = table.getColCount();
        tableFeature.x = table.getX();
        tableFeature.width = table.getWidth();
        return tableFeature;
    }



    /**
     * 比较两个表是否为同一个table对象
     * 1. 在同一个page中两个table则确定不为同一个table对象
     * 2. 在不同page中两个table则根据table的特征
     *     a。 table的行数相同，列数相同，列宽相同，X轴坐标误差在0.02，表宽度相同 则认为两个table为同一个table对象
     * @param o the object to be compared.
     * @return true 表示为同一个table对象
     *         false 表示两个table对象不同
     */
    public boolean compareTo(TableFeature o) {
        if (this.pageNum == o.pageNum){
            System.out.println(String.format("两个table页码相同，判断为不同的table"));
            // 在同一个page中两个table则确定不为同一个table对象
            return false;
        }

        // 两个table的列数不同，则认为两个table对象不同
        if (this.columnNum != o.columnNum){
            System.out.println(String.format("两个table列数不同，判断为不同的table"));
            return false;
        }

//        if (Math.abs(this.x - o.x) > 1){
//            System.out.println(String.format("两个table的x轴坐标差绝对值 大于0.02，判断为不同的table"));
//            // 两个表格的x轴坐标差绝对值 大于0.02 则认为两个table对象不同
//            return false;
//        }
        // 两个table的宽度差大于0.02 则认为两个table对象不同
//        if (Math.abs(this.width - o.width) > 1){
//            System.out.println(String.format("两个table的宽度差绝对值 大于0.02，判断为不同的table"));
//            return false;
//        }

//        // 判断两个table的每个列的x轴坐标差绝对值是否小于0.02，列宽差绝对值是否小于0.02
//        RectangularTextContainer cell1 = null;
//        RectangularTextContainer cell2 = null;
//        for (int i = 0; i < this.columnNum; i++) {
//             cell1 = this.table.getCell(0,i);
//             cell2 = o.table.getCell(0,i);
//             if (Math.abs(cell1.getX() - cell2.getX()) > 1 || Math.abs(cell1.getWidth() - cell2.getWidth()) > 1){
//                // 列的x轴坐标差绝对值大于0.02 或者列宽差绝对值大于0.02 则认为两个table对象不同
//                 return false;
//             }
//        }
        // 判断后一个表的第一行，第一列 中的内容为 “序号” 则表示 两个table对象不相同
        if (o.table.getCell(0,0).getText(false).contains("序号")){
            return false;
        }


        // 以上判断都满足则认为两个table对象相同
        return true;
    }
}
